package com.iflytek.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.stereotype.Component;

import java.io.IOException;

/*
 构建mybatis 的工具类，相当于得到 connection 连接对象
 本类的作用就是返回出去一个sqlsessionFactory 对象
 */
@Component
public class MyBatisUtil {
    //通过此类得到SqlSessionFactory(SqlSession工厂：产生SqlSession对象)单例模式
    // 单例模式：在系统项目运行时，内存中只有一个对象存在
    // 将此工具类的构造方法私有化！！ 注意是 私有的构造放噶
    private MyBatisUtil(){

    }
    // 定义工厂对象，第一次创造的sqlSessionFactory对象
    private static SqlSessionFactory sqlSessionFactory = null;
    //将SqlSessionFactory定义成单例模式
    // static{}静态代码块，此代码块只会在第一次加载此类的时候执行一次，当后面在
    // 加载此类时便不会再执行
    // 官网中获取SqlSessionFactory对象的方法
    static {
        // 获得sqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =
                new SqlSessionFactoryBuilder();
        //读取mybaits‐config.xml配置文件，获取SqlSessionFactory对象
        try {
            // 获得mybatis-config.xml的路径直接定位到 resources目录下!!
            sqlSessionFactory = sqlSessionFactoryBuilder.build(
                    Resources.getResourceAsStream("mybatis-config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 得到SqlSessionFactory对象
    public static SqlSessionFactory getSqlSessionFactory(){
        // 返回工厂对象
        return sqlSessionFactory;
    }
}
